<?php
// +-----------------------------------------------------------------------+
// |                                                                       |
// | WebFormsQA     (Question - Answer)                                    |
// | Copyright  (C) 2010                                                   |
// | Official site  www.scale-tech.ru                                      |
// | email          scale-tech@mail.ru                                     |
// | autor          Alexander Demachev                                     |
// |                                                                       |
// | This program is free software; you can redistribute it and/or modify  |
// | it under the terms of the GNU General Public License as published by  |
// | the Free Software Foundation; version 2 of the License.               |
// |                                                                       |
// | This program is distributed in the hope that it will be useful,       |
// | but WITHOUT ANY WARRANTY; without even the implied warranty of        |
// | MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the         |
// | GNU General Public License for more details.                          |
// +-----------------------------------------------------------------------+

/**
 * @file register_page.test.php
 * @brief файл содержит код для тестирования класса RegisterPage \n
 * @include register_page.test.php
 */

/*! @addtogroup TestWebFormsQA Tестирование проекта WebFormsQA
 *  Группа включает классы для тестирования исходного кода
 *  @{
 */


/**
 * @class RegisterPageTest 
 * @brief Класс для проверки страницы регистрации нового пользователя \n
 *        Исходный код [ @ref register_page.test.php ] 
 */
class RegisterPageTest extends PHPUnit_TestCase {

    /**
     * Метод проверяет состояния страницы регистрации пользователя
     */
    function testUpdate()
    {
        require_once('smarty/smarty.class.php');
        $smarty         = new Smarty;
        $attr           = array();

        // путь к текущему активному шаблону
        $path_template  = "./templates/first/";
        $main_page= new MainPage($smarty, $attr, $path_template, "");

        DataAddTest::DeleteTestDataInDatabase();
        DataAddTest::AddTestDataInDatabase();

        // состояние страницы
        // 0 - начальное
        // 1 - пользователь с таким именем уже есть
        // 2 - пользователь успешно зарегестрирован
        // 3 - введена неверная строка
        // 4 - имя администратора указано не верно
        // 5 - пароль администратора указан не верно
        // 6 - имя пользователя содержит неправильные символы
        
        $smarty->assign("state", 0);
        $_POST['register_page']  	= '';
        $main_page->update();
        $state = $smarty->get_template_vars('state');
        $this->assertEquals(0, $state);

        $_POST['first']     	= 'ivan';
        $main_page->update();
        $state = $smarty->get_template_vars('state');
        // ошибка задания кода подтверждения
        $this->assertEquals(0, $state);
        
        $_POST['first']     	= 'ivan';
        $_POST['second']		= 'ivan';
        $_POST['email']			= 'ivan@rambler.ru';
        $_POST['admin_first']	= '';
        $_POST['admin_second']	= '';
        $_POST['code']			= '';
        $main_page->update();
        $state = $smarty->get_template_vars('state');
        $this->assertEquals(3, $state);
        
        $_POST['code'] = $_SESSION["code"];
        // пользователь успешно зарегистрирован
        $main_page->update();
        $state = $smarty->get_template_vars('state');
        $this->assertEquals(2, $state);
        
        $this->assertEquals(2, $_SESSION['id_user']);
	    $this->assertEquals("ivan", $_SESSION['authorization_user']);
	    $this->assertEquals(false, $_SESSION['authorization_admin']);
	    // переменная с кодом очищена
        $this->assertFalse( isset($_SESSION["code"]) );
	    
        
		// так как переменная с кодом была очищена, то в данном цикле 
		// она не может быть проверена
        $main_page->update();
        $state = $smarty->get_template_vars('state');
        $this->assertEquals(0, $state);
        

        $_POST['code'] 			= $_SESSION["code"];
        // пользователь cуществует
        $main_page->update();
        $state = $smarty->get_template_vars('state');
        $this->assertEquals(1, $state);
        
        $etalon = array( 'ivan', 'ivan@rambler.ru', '', STATEMENT_NO );
        $reg_userinfo = $smarty->get_template_vars('reg_userinfo');
        $display_entrance = $smarty->get_template_vars('display_entrance');
        $this->assertEquals($etalon, $reg_userinfo);
        $this->assertEquals(false, $display_entrance);

        
        // в имени присутствует запрещенный символ "_"
        $_POST['first']     	= 'user_test';
        $_POST['second']		= 'user_test';
        $_POST['email']			= 'test@rambler.ru';
        $_POST['admin_first']	= '';
        $_POST['admin_second']	= '';
        $_POST['code']			= $_SESSION["code"];
        $main_page->update();
        $state = $smarty->get_template_vars('state');
        $this->assertEquals(6, $state);
        
        $_POST['first']     	= 'пользователь';
        $_POST['second']		= 'пользователь';
        $_POST['email']			= 'test@rambler.ru';
        $_POST['admin_first']	= '';
        $_POST['admin_second']	= '';
        $_POST['code']			= $_SESSION["code"];
        $main_page->update();
        $state = $smarty->get_template_vars('state');
        $this->assertEquals(6, $state);
        
        
        
        
        unset($_SESSION["id_user"]);
        unset($_SESSION["code"]);
		unset( $_SESSION['categoryID'] );
        unset( $_POST['register_page'] );
        unset( $_POST['first'] );
        unset( $_POST['second'] );
        unset( $_POST['email'] );
        unset( $_POST['admin_first'] );
        unset( $_POST['admin_second'] );
        unset( $_POST['code'] );
        
    } // testUpdate


} // EditPageTest

/*! @} */

?>
